#ifndef MENUITEMEDIDIALOG_H
#define MENUITEMEDIDIALOG_H

#include <QDialog>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFormLayout>
#include <QLineEdit>
#include <QComboBox>
#include <QDoubleSpinBox>
#include <QSpinBox>
#include <QTextEdit>
#include <QPushButton>
#include <QLabel>
#include <QMessageBox>
#include <QFileDialog>
#include <QPixmap>
#include <QDir>
#include <QDateTime>
#include "menumanager.h"
#include "models.h"

// 使用命名空间
using namespace RestaurantSystem;

/**
 * @brief 菜品编辑对话框
 * 
 * 用于添加新菜品或编辑现有菜品的对话框界面
 */
class MenuItemEditDialog : public QDialog
{
    Q_OBJECT

public:
    explicit MenuItemEditDialog(QWidget *parent = nullptr);
    ~MenuItemEditDialog();
    
    /**
     * @brief 设置菜单管理器
     * @param manager MenuManager实例
     */
    void setMenuManager(MenuManager *manager);
    
    /**
     * @brief 设置为新增模式
     * @param categories 可用的分类列表
     */
    void setAddMode(const QStringList &categories);
    
    /**
     * @brief 设置为编辑模式
     * @param item 要编辑的菜品
     * @param categories 可用的分类列表
     */
    void setEditMode(const MenuItem &item, const QStringList &categories);

signals:
    /**
     * @brief 菜品已保存信号
     * @param item 保存的菜品信息
     * @param isNewItem 是否为新增菜品
     */
    void menuItemSaved(const MenuItem &item, bool isNewItem);

protected:
    void accept() override;

private slots:
    /**
     * @brief 图片操作槽函数
     */
    void onSelectImageClicked();
    void onClearImageClicked();

private:
    /**
     * @brief 界面初始化
     */
    void setupUI();
    void setupFormControls();
    void setupImageControls();
    void setupButtons();
    void applyStyles();
    
    /**
     * @brief 数据操作
     */
    void clearForm();
    void fillForm(const MenuItem &item);
    MenuItem getMenuItemFromForm();
    bool validateFormData();
    
    /**
     * @brief 图片管理
     */
    void updateImagePreview(const QString &imagePath);
    void clearImagePreview();
    QString copyImageToResourceDir(const QString &sourceImagePath, const QString &category, const QString &itemName);
    
    /**
     * @brief 辅助方法
     */
    QString getMessageBoxStyleSheet() const;

private:
    // 核心组件
    MenuManager *m_menuManager;
    
    // 主布局
    QVBoxLayout *m_mainLayout;
    
    // 表单控件
    QWidget *m_formWidget;
    QFormLayout *m_formLayout;
    QLineEdit *m_nameEdit;
    QComboBox *m_categoryEdit;
    QDoubleSpinBox *m_priceEdit;
    QSpinBox *m_stockEdit;
    QTextEdit *m_descriptionEdit;
    
    // 图片控件
    QWidget *m_imageWidget;
    QVBoxLayout *m_imageLayout;
    QLabel *m_imagePreview;
    QHBoxLayout *m_imageButtonLayout;
    QPushButton *m_selectImageButton;
    QPushButton *m_clearImageButton;
    QLabel *m_imagePathLabel;
    QString m_currentImagePath;
    
    // 按钮
    QHBoxLayout *m_buttonLayout;
    QWidget *m_buttonWidget;
    QPushButton *m_saveButton;
    QPushButton *m_cancelButton;
    
    // 数据和状态
    bool m_isEditMode;
    QString m_editingItemId;
    QStringList m_categories;
};

#endif // MENUITEMEDIDIALOG_H
